home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / lang / ClassLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  16.1 KB  |  871 lines

  1. package java.lang;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.lang.reflect.InvocationTargetException;
  7. import java.net.URL;
  8. import java.nio.ByteBuffer;
  9. import java.security.AccessControlContext;
  10. import java.security.AccessController;
  11. import java.security.CodeSource;
  12. import java.security.PermissionCollection;
  13. import java.security.Principal;
  14. import java.security.PrivilegedActionException;
  15. import java.security.ProtectionDomain;
  16. import java.security.cert.Certificate;
  17. import java.util.Enumeration;
  18. import java.util.HashMap;
  19. import java.util.HashSet;
  20. import java.util.Hashtable;
  21. import java.util.Map;
  22. import java.util.Set;
  23. import java.util.Stack;
  24. import java.util.Vector;
  25. import sun.misc.ClassFileTransformer;
  26. import sun.misc.CompoundEnumeration;
  27. import sun.misc.Launcher;
  28. import sun.misc.Resource;
  29. import sun.misc.URLClassPath;
  30. import sun.misc.VM;
  31. import sun.reflect.Reflection;
  32. import sun.security.util.SecurityConstants;
  33.  
  34. public abstract class ClassLoader {
  35.    private boolean initialized = false;
  36.    private ClassLoader parent;
  37.    private Hashtable package2certs = new Hashtable(11);
  38.    Certificate[] nocerts;
  39.    private Vector classes = new Vector();
  40.    private Set domains = new HashSet();
  41.    private HashMap packages = new HashMap();
  42.    private static URLClassPath bootstrapClassPath;
  43.    private static ClassLoader scl;
  44.    private static boolean sclSet;
  45.    private ProtectionDomain defaultDomain = null;
  46.    private static Vector loadedLibraryNames;
  47.    private static Vector systemNativeLibraries;
  48.    private Vector nativeLibraries = new Vector();
  49.    private static Stack nativeLibraryContext;
  50.    private static String[] usr_paths;
  51.    private static String[] sys_paths;
  52.    private boolean defaultAssertionStatus = false;
  53.    private Map packageAssertionStatus = null;
  54.    Map classAssertionStatus = null;
  55.  
  56.    private static native void registerNatives();
  57.  
  58.    void addClass(Class var1) {
  59.       this.classes.addElement(var1);
  60.    }
  61.  
  62.    protected ClassLoader(ClassLoader var1) {
  63.       SecurityManager var2 = System.getSecurityManager();
  64.       if (var2 != null) {
  65.          var2.checkCreateClassLoader();
  66.       }
  67.  
  68.       this.parent = var1;
  69.       this.initialized = true;
  70.    }
  71.  
  72.    protected ClassLoader() {
  73.       SecurityManager var1 = System.getSecurityManager();
  74.       if (var1 != null) {
  75.          var1.checkCreateClassLoader();
  76.       }
  77.  
  78.       this.parent = getSystemClassLoader();
  79.       this.initialized = true;
  80.    }
  81.  
  82.    public Class<?> loadClass(String var1) throws ClassNotFoundException {
  83.       return this.loadClass(var1, false);
  84.    }
  85.  
  86.    protected synchronized Class<?> loadClass(String var1, boolean var2) throws ClassNotFoundException {
  87.       Class var3 = this.findLoadedClass(var1);
  88.       if (var3 == null) {
  89.          try {
  90.             if (this.parent != null) {
  91.                var3 = this.parent.loadClass(var1, false);
  92.             } else {
  93.                var3 = this.findBootstrapClass0(var1);
  94.             }
  95.          } catch (ClassNotFoundException var5) {
  96.             var3 = this.findClass(var1);
  97.          }
  98.       }
  99.  
  100.       if (var2) {
  101.          this.resolveClass(var3);
  102.       }
  103.  
  104.       return var3;
  105.    }
  106.  
  107.    private synchronized Class loadClassInternal(String var1) throws ClassNotFoundException {
  108.       return this.loadClass(var1);
  109.    }
  110.  
  111.    private void checkPackageAccess(Class var1, ProtectionDomain var2) {
  112.       SecurityManager var3 = System.getSecurityManager();
  113.       if (var3 != null) {
  114.          String var4 = var1.getName();
  115.          int var5 = var4.lastIndexOf(46);
  116.          if (var5 != -1) {
  117.             AccessController.doPrivileged(new 1(this, var3, var4, var5), new AccessControlContext(new ProtectionDomain[]{var2}));
  118.          }
  119.       }
  120.  
  121.       this.domains.add(var2);
  122.    }
  123.  
  124.    protected Class<?> findClass(String var1) throws ClassNotFoundException {
  125.       throw new ClassNotFoundException(var1);
  126.    }
  127.  
  128.    /** @deprecated */
  129.    @Deprecated
  130.    protected final Class<?> defineClass(byte[] var1, int var2, int var3) throws ClassFormatError {
  131.       return this.defineClass((String)null, var1, var2, var3, (ProtectionDomain)null);
  132.    }
  133.  
  134.    protected final Class<?> defineClass(String var1, byte[] var2, int var3, int var4) throws ClassFormatError {
  135.       return this.defineClass(var1, var2, var3, var4, (ProtectionDomain)null);
  136.    }
  137.  
  138.    private ProtectionDomain preDefineClass(String var1, ProtectionDomain var2) {
  139.       if (!this.checkName(var1)) {
  140.          throw new NoClassDefFoundError("IllegalName: " + var1);
  141.       } else if (var1 != null && var1.startsWith("java.")) {
  142.          throw new SecurityException("Prohibited package name: " + var1.substring(0, var1.lastIndexOf(46)));
  143.       } else {
  144.          if (var2 == null) {
  145.             var2 = this.getDefaultDomain();
  146.          }
  147.  
  148.          if (var1 != null) {
  149.             this.checkCerts(var1, var2.getCodeSource());
  150.          }
  151.  
  152.          return var2;
  153.       }
  154.    }
  155.  
  156.    private String defineClassSourceLocation(ProtectionDomain var1) {
  157.       CodeSource var2 = var1.getCodeSource();
  158.       String var3 = null;
  159.       if (var2 != null && var2.getLocation() != null) {
  160.          var3 = var2.getLocation().toString();
  161.       }
  162.  
  163.       return var3;
  164.    }
  165.  
  166.    private Class defineTransformedClass(String var1, byte[] var2, int var3, int var4, ProtectionDomain var5, ClassFormatError var6, String var7) throws ClassFormatError {
  167.       Object[] var8 = ClassFileTransformer.getTransformers();
  168.       Class var9 = null;
  169.  
  170.       for(int var10 = 0; var8 != null && var10 < var8.length; ++var10) {
  171.          try {
  172.             byte[] var11 = ((ClassFileTransformer)var8[var10]).transform(var2, var3, var4);
  173.             var9 = this.defineClass1(var1, var11, 0, var11.length, var5, var7);
  174.             break;
  175.          }
  176.       }
  177.  
  178.       if (var9 == null) {
  179.          throw var6;
  180.       } else {
  181.          return var9;
  182.       }
  183.    }
  184.  
  185.    private void postDefineClass(Class var1, ProtectionDomain var2) {
  186.       if (var2.getCodeSource() != null) {
  187.          Certificate[] var3 = var2.getCodeSource().getCertificates();
  188.          if (var3 != null) {
  189.             this.setSigners(var1, var3);
  190.          }
  191.       }
  192.  
  193.    }
  194.  
  195.    protected final Class<?> defineClass(String var1, byte[] var2, int var3, int var4, ProtectionDomain var5) throws ClassFormatError {
  196.       this.check();
  197.       var5 = this.preDefineClass(var1, var5);
  198.       Object var6 = null;
  199.       String var7 = this.defineClassSourceLocation(var5);
  200.  
  201.       try {
  202.          var11 = this.defineClass1(var1, var2, var3, var4, var5, var7);
  203.       } catch (ClassFormatError var9) {
  204.          var11 = this.defineTransformedClass(var1, var2, var3, var4, var5, var9, var7);
  205.       }
  206.  
  207.       this.postDefineClass(var11, var5);
  208.       return var11;
  209.    }
  210.  
  211.    protected final Class<?> defineClass(String var1, ByteBuffer var2, ProtectionDomain var3) throws ClassFormatError {
  212.       this.check();
  213.       int var4 = var2.remaining();
  214.       if (!var2.isDirect()) {
  215.          if (var2.hasArray()) {
  216.             return this.defineClass(var1, var2.array(), var2.position() + var2.arrayOffset(), var4, var3);
  217.          } else {
  218.             byte[] var12 = new byte[var4];
  219.             var2.get(var12);
  220.             return this.defineClass(var1, var12, 0, var4, var3);
  221.          }
  222.       } else {
  223.          var3 = this.preDefineClass(var1, var3);
  224.          Object var5 = null;
  225.          String var6 = this.defineClassSourceLocation(var3);
  226.  
  227.          try {
  228.             var11 = this.defineClass2(var1, var2, var2.position(), var4, var3, var6);
  229.          } catch (ClassFormatError var9) {
  230.             byte[] var8 = new byte[var4];
  231.             var2.get(var8);
  232.             var11 = this.defineTransformedClass(var1, var8, 0, var4, var3, var9, var6);
  233.          }
  234.  
  235.          this.postDefineClass(var11, var3);
  236.          return var11;
  237.       }
  238.    }
  239.  
  240.    private native Class defineClass0(String var1, byte[] var2, int var3, int var4, ProtectionDomain var5);
  241.  
  242.    private native Class defineClass1(String var1, byte[] var2, int var3, int var4, ProtectionDomain var5, String var6);
  243.  
  244.    private native Class defineClass2(String var1, ByteBuffer var2, int var3, int var4, ProtectionDomain var5, String var6);
  245.  
  246.    private boolean checkName(String var1) {
  247.       if (var1 != null && var1.length() != 0) {
  248.          return var1.indexOf(47) == -1 && (VM.allowArraySyntax() || var1.charAt(0) != '[');
  249.       } else {
  250.          return true;
  251.       }
  252.    }
  253.  
  254.    private synchronized void checkCerts(String var1, CodeSource var2) {
  255.       int var3 = var1.lastIndexOf(46);
  256.       String var4 = var3 == -1 ? "" : var1.substring(0, var3);
  257.       Certificate[] var5 = (Certificate[])this.package2certs.get(var4);
  258.       if (var5 == null) {
  259.          if (var2 != null) {
  260.             var5 = var2.getCertificates();
  261.          }
  262.  
  263.          if (var5 == null) {
  264.             if (this.nocerts == null) {
  265.                this.nocerts = new Certificate[0];
  266.             }
  267.  
  268.             var5 = this.nocerts;
  269.          }
  270.  
  271.          this.package2certs.put(var4, var5);
  272.       } else {
  273.          Certificate[] var6 = null;
  274.          if (var2 != null) {
  275.             var6 = var2.getCertificates();
  276.          }
  277.  
  278.          if (!this.compareCerts(var5, var6)) {
  279.             throw new SecurityException("class \"" + var1 + "\"'s signer information does not match signer information of other classes in the same package");
  280.          }
  281.       }
  282.  
  283.    }
  284.  
  285.    private boolean compareCerts(Certificate[] var1, Certificate[] var2) {
  286.       if (var2 != null && var2.length != 0) {
  287.          if (var2.length != var1.length) {
  288.             return false;
  289.          } else {
  290.             for(int var4 = 0; var4 < var2.length; ++var4) {
  291.                boolean var3 = false;
  292.  
  293.                for(int var5 = 0; var5 < var1.length; ++var5) {
  294.                   if (var2[var4].equals(var1[var5])) {
  295.                      var3 = true;
  296.                      break;
  297.                   }
  298.                }
  299.  
  300.                if (!var3) {
  301.                   return false;
  302.                }
  303.             }
  304.  
  305.             for(int var7 = 0; var7 < var1.length; ++var7) {
  306.                boolean var6 = false;
  307.  
  308.                for(int var8 = 0; var8 < var2.length; ++var8) {
  309.                   if (var1[var7].equals(var2[var8])) {
  310.                      var6 = true;
  311.                      break;
  312.                   }
  313.                }
  314.  
  315.                if (!var6) {
  316.                   return false;
  317.                }
  318.             }
  319.  
  320.             return true;
  321.          }
  322.       } else {
  323.          return var1.length == 0;
  324.       }
  325.    }
  326.  
  327.    protected final void resolveClass(Class<?> var1) {
  328.       this.check();
  329.       this.resolveClass0(var1);
  330.    }
  331.  
  332.    private native void resolveClass0(Class var1);
  333.  
  334.    protected final Class<?> findSystemClass(String var1) throws ClassNotFoundException {
  335.       this.check();
  336.       ClassLoader var2 = getSystemClassLoader();
  337.       if (var2 == null) {
  338.          if (!this.checkName(var1)) {
  339.             throw new ClassNotFoundException(var1);
  340.          } else {
  341.             return this.findBootstrapClass(var1);
  342.          }
  343.       } else {
  344.          return var2.loadClass(var1);
  345.       }
  346.    }
  347.  
  348.    private Class findBootstrapClass0(String var1) throws ClassNotFoundException {
  349.       this.check();
  350.       if (!this.checkName(var1)) {
  351.          throw new ClassNotFoundException(var1);
  352.       } else {
  353.          return this.findBootstrapClass(var1);
  354.       }
  355.    }
  356.  
  357.    private native Class findBootstrapClass(String var1) throws ClassNotFoundException;
  358.  
  359.    private void check() {
  360.       if (!this.initialized) {
  361.          throw new SecurityException("ClassLoader object not initialized");
  362.       }
  363.    }
  364.  
  365.    protected final Class<?> findLoadedClass(String var1) {
  366.       this.check();
  367.       return !this.checkName(var1) ? null : this.findLoadedClass0(var1);
  368.    }
  369.  
  370.    private final native Class findLoadedClass0(String var1);
  371.  
  372.    protected final void setSigners(Class<?> var1, Object[] var2) {
  373.       this.check();
  374.       var1.setSigners(var2);
  375.    }
  376.  
  377.    public URL getResource(String var1) {
  378.       URL var2;
  379.       if (this.parent != null) {
  380.          var2 = this.parent.getResource(var1);
  381.       } else {
  382.          var2 = getBootstrapResource(var1);
  383.       }
  384.  
  385.       if (var2 == null) {
  386.          var2 = this.findResource(var1);
  387.       }
  388.  
  389.       return var2;
  390.    }
  391.  
  392.    public Enumeration<URL> getResources(String var1) throws IOException {
  393.       Enumeration[] var2 = new Enumeration[2];
  394.       if (this.parent != null) {
  395.          var2[0] = this.parent.getResources(var1);
  396.       } else {
  397.          var2[0] = getBootstrapResources(var1);
  398.       }
  399.  
  400.       var2[1] = this.findResources(var1);
  401.       return new CompoundEnumeration(var2);
  402.    }
  403.  
  404.    protected URL findResource(String var1) {
  405.       return null;
  406.    }
  407.  
  408.    protected Enumeration<URL> findResources(String var1) throws IOException {
  409.       return new CompoundEnumeration(new Enumeration[0]);
  410.    }
  411.  
  412.    public static URL getSystemResource(String var0) {
  413.       ClassLoader var1 = getSystemClassLoader();
  414.       return var1 == null ? getBootstrapResource(var0) : var1.getResource(var0);
  415.    }
  416.  
  417.    public static Enumeration<URL> getSystemResources(String var0) throws IOException {
  418.       ClassLoader var1 = getSystemClassLoader();
  419.       return var1 == null ? getBootstrapResources(var0) : var1.getResources(var0);
  420.    }
  421.  
  422.    private static URL getBootstrapResource(String var0) {
  423.       URLClassPath var1 = getBootstrapClassPath();
  424.       Resource var2 = var1.getResource(var0);
  425.       return var2 != null ? var2.getURL() : null;
  426.    }
  427.  
  428.    private static Enumeration getBootstrapResources(String var0) throws IOException {
  429.       Enumeration var1 = getBootstrapClassPath().getResources(var0);
  430.       return new 2(var1);
  431.    }
  432.  
  433.    static URLClassPath getBootstrapClassPath() {
  434.       if (bootstrapClassPath == null) {
  435.          bootstrapClassPath = Launcher.getBootstrapClassPath();
  436.       }
  437.  
  438.       return bootstrapClassPath;
  439.    }
  440.  
  441.    public InputStream getResourceAsStream(String var1) {
  442.       URL var2 = this.getResource(var1);
  443.  
  444.       try {
  445.          return var2 != null ? var2.openStream() : null;
  446.       } catch (IOException var4) {
  447.          return null;
  448.       }
  449.    }
  450.  
  451.    public static InputStream getSystemResourceAsStream(String var0) {
  452.       URL var1 = getSystemResource(var0);
  453.  
  454.       try {
  455.          return var1 != null ? var1.openStream() : null;
  456.       } catch (IOException var3) {
  457.          return null;
  458.       }
  459.    }
  460.  
  461.    public final ClassLoader getParent() {
  462.       if (this.parent == null) {
  463.          return null;
  464.       } else {
  465.          SecurityManager var1 = System.getSecurityManager();
  466.          if (var1 != null) {
  467.             ClassLoader var2 = getCallerClassLoader();
  468.             if (var2 != null && !this.isAncestor(var2)) {
  469.                var1.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
  470.             }
  471.          }
  472.  
  473.          return this.parent;
  474.       }
  475.    }
  476.  
  477.    public static ClassLoader getSystemClassLoader() {
  478.       initSystemClassLoader();
  479.       if (scl == null) {
  480.          return null;
  481.       } else {
  482.          SecurityManager var0 = System.getSecurityManager();
  483.          if (var0 != null) {
  484.             ClassLoader var1 = getCallerClassLoader();
  485.             if (var1 != null && var1 != scl && !scl.isAncestor(var1)) {
  486.                var0.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
  487.             }
  488.          }
  489.  
  490.          return scl;
  491.       }
  492.    }
  493.  
  494.    private static synchronized void initSystemClassLoader() {
  495.       if (!sclSet) {
  496.          if (scl != null) {
  497.             throw new IllegalStateException("recursive invocation");
  498.          }
  499.  
  500.          Launcher var0 = Launcher.getLauncher();
  501.          if (var0 != null) {
  502.             Throwable var1 = null;
  503.             scl = var0.getClassLoader();
  504.  
  505.             try {
  506.                SystemClassLoaderAction var2 = new SystemClassLoaderAction(scl);
  507.                scl = (ClassLoader)AccessController.doPrivileged(var2);
  508.             } catch (PrivilegedActionException var3) {
  509.                var1 = var3.getCause();
  510.                if (var1 instanceof InvocationTargetException) {
  511.                   var1 = var1.getCause();
  512.                }
  513.             }
  514.  
  515.             if (var1 != null) {
  516.                if (var1 instanceof Error) {
  517.                   throw (Error)var1;
  518.                }
  519.  
  520.                throw new Error(var1);
  521.             }
  522.          }
  523.  
  524.          sclSet = true;
  525.       }
  526.  
  527.    }
  528.  
  529.    boolean isAncestor(ClassLoader var1) {
  530.       ClassLoader var2 = this;
  531.  
  532.       do {
  533.          var2 = var2.parent;
  534.          if (var1 == var2) {
  535.             return true;
  536.          }
  537.       } while(var2 != null);
  538.  
  539.       return false;
  540.    }
  541.  
  542.    static ClassLoader getCallerClassLoader() {
  543.       Class var0 = Reflection.getCallerClass(3);
  544.       return var0 == null ? null : var0.getClassLoader0();
  545.    }
  546.  
  547.    protected Package definePackage(String var1, String var2, String var3, String var4, String var5, String var6, String var7, URL var8) throws IllegalArgumentException {
  548.       synchronized(this.packages) {
  549.          Package var10 = this.getPackage(var1);
  550.          if (var10 != null) {
  551.             throw new IllegalArgumentException(var1);
  552.          } else {
  553.             var10 = new Package(var1, var2, var3, var4, var5, var6, var7, var8, this);
  554.             this.packages.put(var1, var10);
  555.             return var10;
  556.          }
  557.       }
  558.    }
  559.  
  560.    protected Package getPackage(String var1) {
  561.       synchronized(this.packages) {
  562.          Package var3 = (Package)this.packages.get(var1);
  563.          if (var3 == null) {
  564.             if (this.parent != null) {
  565.                var3 = this.parent.getPackage(var1);
  566.             } else {
  567.                var3 = Package.getSystemPackage(var1);
  568.             }
  569.  
  570.             if (var3 != null) {
  571.                this.packages.put(var1, var3);
  572.             }
  573.          }
  574.  
  575.          return var3;
  576.       }
  577.    }
  578.  
  579.    protected Package[] getPackages() {
  580.       Map var1;
  581.       synchronized(this.packages) {
  582.          var1 = (Map)this.packages.clone();
  583.       }
  584.  
  585.       Package[] var2;
  586.       if (this.parent != null) {
  587.          var2 = this.parent.getPackages();
  588.       } else {
  589.          var2 = Package.getSystemPackages();
  590.       }
  591.  
  592.       if (var2 != null) {
  593.          for(int var3 = 0; var3 < var2.length; ++var3) {
  594.             String var4 = var2[var3].getName();
  595.             if (var1.get(var4) == null) {
  596.                var1.put(var4, var2[var3]);
  597.             }
  598.          }
  599.       }
  600.  
  601.       return (Package[])var1.values().toArray(new Package[var1.size()]);
  602.    }
  603.  
  604.    protected String findLibrary(String var1) {
  605.       return null;
  606.    }
  607.  
  608.    private synchronized ProtectionDomain getDefaultDomain() {
  609.       if (this.defaultDomain == null) {
  610.          CodeSource var1 = new CodeSource((URL)null, (Certificate[])null);
  611.          this.defaultDomain = new ProtectionDomain(var1, (PermissionCollection)null, this, (Principal[])null);
  612.       }
  613.  
  614.       return this.defaultDomain;
  615.    }
  616.  
  617.    private static String[] initializePath(String var0) {
  618.       String var1 = System.getProperty(var0, "");
  619.       String var2 = File.pathSeparator;
  620.       int var3 = var1.length();
  621.       int var4 = var1.indexOf(var2);
  622.  
  623.       int var6;
  624.       for(var6 = 0; var4 >= 0; var4 = var1.indexOf(var2, var4 + 1)) {
  625.          ++var6;
  626.       }
  627.  
  628.       String[] var7 = new String[var6 + 1];
  629.       var4 = 0;
  630.       var6 = 0;
  631.  
  632.       for(int var5 = var1.indexOf(var2); var5 >= 0; var5 = var1.indexOf(var2, var4)) {
  633.          if (var5 - var4 > 0) {
  634.             var7[var6++] = var1.substring(var4, var5);
  635.          } else if (var5 - var4 == 0) {
  636.             var7[var6++] = ".";
  637.          }
  638.  
  639.          var4 = var5 + 1;
  640.       }
  641.  
  642.       var7[var6] = var1.substring(var4, var3);
  643.       return var7;
  644.    }
  645.  
  646.    static void loadLibrary(Class var0, String var1, boolean var2) {
  647.       ClassLoader var3 = var0 == null ? null : var0.getClassLoader();
  648.       if (sys_paths == null) {
  649.          usr_paths = initializePath("java.library.path");
  650.          sys_paths = initializePath("sun.boot.library.path");
  651.       }
  652.  
  653.       if (var2) {
  654.          if (!loadLibrary0(var0, new File(var1))) {
  655.             throw new UnsatisfiedLinkError("Can't load library: " + var1);
  656.          }
  657.       } else {
  658.          if (var3 != null) {
  659.             String var4 = var3.findLibrary(var1);
  660.             if (var4 != null) {
  661.                File var9 = new File(var4);
  662.                if (!var9.isAbsolute()) {
  663.                   throw new UnsatisfiedLinkError("ClassLoader.findLibrary failed to return an absolute path: " + var4);
  664.                }
  665.  
  666.                if (loadLibrary0(var0, var9)) {
  667.                   return;
  668.                }
  669.  
  670.                throw new UnsatisfiedLinkError("Can't load " + var4);
  671.             }
  672.          }
  673.  
  674.          for(int var6 = 0; var6 < sys_paths.length; ++var6) {
  675.             File var5 = new File(sys_paths[var6], System.mapLibraryName(var1));
  676.             if (loadLibrary0(var0, var5)) {
  677.                return;
  678.             }
  679.          }
  680.  
  681.          if (var3 != null) {
  682.             for(int var7 = 0; var7 < usr_paths.length; ++var7) {
  683.                File var8 = new File(usr_paths[var7], System.mapLibraryName(var1));
  684.                if (loadLibrary0(var0, var8)) {
  685.                   return;
  686.                }
  687.             }
  688.          }
  689.  
  690.          throw new UnsatisfiedLinkError("no " + var1 + " in java.library.path");
  691.       }
  692.    }
  693.  
  694.    private static boolean loadLibrary0(Class var0, File var1) {
  695.       Boolean var2 = (Boolean)AccessController.doPrivileged(new 3(var1));
  696.       if (!var2) {
  697.          return false;
  698.       } else {
  699.          String var3;
  700.          try {
  701.             var3 = var1.getCanonicalPath();
  702.          } catch (IOException var20) {
  703.             return false;
  704.          }
  705.  
  706.          ClassLoader var4 = var0 == null ? null : var0.getClassLoader();
  707.          Vector var5 = var4 != null ? var4.nativeLibraries : systemNativeLibraries;
  708.          synchronized(var5) {
  709.             int var7 = var5.size();
  710.  
  711.             for(int var8 = 0; var8 < var7; ++var8) {
  712.                NativeLibrary var9 = (NativeLibrary)var5.elementAt(var8);
  713.                if (var3.equals(var9.name)) {
  714.                   return true;
  715.                }
  716.             }
  717.  
  718.             boolean var25;
  719.             synchronized(loadedLibraryNames) {
  720.                if (loadedLibraryNames.contains(var3)) {
  721.                   throw new UnsatisfiedLinkError("Native Library " + var3 + " already loaded in another classloader");
  722.                }
  723.  
  724.                int var23 = nativeLibraryContext.size();
  725.  
  726.                for(int var10 = 0; var10 < var23; ++var10) {
  727.                   NativeLibrary var11 = (NativeLibrary)nativeLibraryContext.elementAt(var10);
  728.                   if (var3.equals(var11.name)) {
  729.                      if (var4 != java.lang.ClassLoader.NativeLibrary.access$200(var11).getClassLoader()) {
  730.                         throw new UnsatisfiedLinkError("Native Library " + var3 + " is being loaded in another classloader");
  731.                      }
  732.  
  733.                      var25 = true;
  734.                      return var25;
  735.                   }
  736.                }
  737.  
  738.                NativeLibrary var24 = new NativeLibrary(var0, var3);
  739.                nativeLibraryContext.push(var24);
  740.  
  741.                try {
  742.                   var24.load(var3);
  743.                } finally {
  744.                   nativeLibraryContext.pop();
  745.                }
  746.  
  747.                if (var24.handle != 0L) {
  748.                   loadedLibraryNames.addElement(var3);
  749.                   var5.addElement(var24);
  750.                   var25 = true;
  751.                   return var25;
  752.                }
  753.  
  754.                var25 = false;
  755.             }
  756.  
  757.             return var25;
  758.          }
  759.       }
  760.    }
  761.  
  762.    static long findNative(ClassLoader var0, String var1) {
  763.       Vector var2 = var0 != null ? var0.nativeLibraries : systemNativeLibraries;
  764.       synchronized(var2) {
  765.          int var4 = var2.size();
  766.  
  767.          for(int var5 = 0; var5 < var4; ++var5) {
  768.             NativeLibrary var6 = (NativeLibrary)var2.elementAt(var5);
  769.             long var7 = var6.find(var1);
  770.             if (var7 != 0L) {
  771.                return var7;
  772.             }
  773.          }
  774.  
  775.          return 0L;
  776.       }
  777.    }
  778.  
  779.    public synchronized void setDefaultAssertionStatus(boolean var1) {
  780.       if (this.classAssertionStatus == null) {
  781.          this.initializeJavaAssertionMaps();
  782.       }
  783.  
  784.       this.defaultAssertionStatus = var1;
  785.    }
  786.  
  787.    public synchronized void setPackageAssertionStatus(String var1, boolean var2) {
  788.       if (this.packageAssertionStatus == null) {
  789.          this.initializeJavaAssertionMaps();
  790.       }
  791.  
  792.       this.packageAssertionStatus.put(var1, var2);
  793.    }
  794.  
  795.    public synchronized void setClassAssertionStatus(String var1, boolean var2) {
  796.       if (this.classAssertionStatus == null) {
  797.          this.initializeJavaAssertionMaps();
  798.       }
  799.  
  800.       this.classAssertionStatus.put(var1, var2);
  801.    }
  802.  
  803.    public synchronized void clearAssertionStatus() {
  804.       this.classAssertionStatus = new HashMap();
  805.       this.packageAssertionStatus = new HashMap();
  806.       this.defaultAssertionStatus = false;
  807.    }
  808.  
  809.    synchronized boolean desiredAssertionStatus(String var1) {
  810.       Boolean var2 = (Boolean)this.classAssertionStatus.get(var1);
  811.       if (var2 != null) {
  812.          return var2;
  813.       } else {
  814.          int var3 = var1.lastIndexOf(".");
  815.          if (var3 < 0) {
  816.             var2 = (Boolean)this.packageAssertionStatus.get((Object)null);
  817.             if (var2 != null) {
  818.                return var2;
  819.             }
  820.          }
  821.  
  822.          while(var3 > 0) {
  823.             var1 = var1.substring(0, var3);
  824.             var2 = (Boolean)this.packageAssertionStatus.get(var1);
  825.             if (var2 != null) {
  826.                return var2;
  827.             }
  828.  
  829.             var3 = var1.lastIndexOf(".", var3 - 1);
  830.          }
  831.  
  832.          return this.defaultAssertionStatus;
  833.       }
  834.    }
  835.  
  836.    private void initializeJavaAssertionMaps() {
  837.       this.classAssertionStatus = new HashMap();
  838.       this.packageAssertionStatus = new HashMap();
  839.       AssertionStatusDirectives var1 = retrieveDirectives();
  840.  
  841.       for(int var2 = 0; var2 < var1.classes.length; ++var2) {
  842.          this.classAssertionStatus.put(var1.classes[var2], var1.classEnabled[var2]);
  843.       }
  844.  
  845.       for(int var3 = 0; var3 < var1.packages.length; ++var3) {
  846.          this.packageAssertionStatus.put(var1.packages[var3], var1.packageEnabled[var3]);
  847.       }
  848.  
  849.       this.defaultAssertionStatus = var1.deflt;
  850.    }
  851.  
  852.    private static native AssertionStatusDirectives retrieveDirectives();
  853.  
  854.    // $FF: synthetic method
  855.    static Vector access$000() {
  856.       return loadedLibraryNames;
  857.    }
  858.  
  859.    // $FF: synthetic method
  860.    static Stack access$100() {
  861.       return nativeLibraryContext;
  862.    }
  863.  
  864.    static {
  865.       registerNatives();
  866.       loadedLibraryNames = new Vector();
  867.       systemNativeLibraries = new Vector();
  868.       nativeLibraryContext = new Stack();
  869.    }
  870. }
  871.